package cn.iocoder.yudao.module.system.controller.admin.gugu.vo;

import cn.iocoder.yudao.framework.common.pojo.PageResult;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;

import java.util.List;

/**
 * 可填专业查询响应 VO - 专门为前端设计的简化接口
 */
@Schema(description = "可填专业查询响应 VO - 专门为前端设计的简化接口")
@Data
public class SuitableMajorsRespVO {

    @Schema(description = "学校分组数据（按学校分组的可填专业）")
    private PageResult<SchoolMajorData> schoolMajors;

    @Schema(description = "冲稳保分类统计")
    private ClassificationSummary summary;

    @Schema(description = "查询信息")
    private String queryInfo;

    /**
     * 学校专业数据
     */
    @Schema(description = "学校专业数据")
    @Data
    public static class SchoolMajorData {
        @Schema(description = "学校UUID", example = "uuid-123")
        private String schoolUuid;

        @Schema(description = "学校名称", example = "北京大学")
        private String schoolName;

        @Schema(description = "学校等级分类", example = "rush", allowableValues = {"rush", "stable", "safe"})
        private String levelType;

        @Schema(description = "冲刺专业数量", example = "10")
        private Integer rushCount;

        @Schema(description = "稳妥专业数量", example = "15")
        private Integer stableCount;

        @Schema(description = "保底专业数量", example = "8")
        private Integer safeCount;

        @Schema(description = "总专业数量", example = "33")
        private Integer totalCount;

        @Schema(description = "学校基础信息")
        private SchoolBasicInfo schoolInfo;

        @Schema(description = "专业详细列表（当includeMajorDetails=true时返回）")
        private List<MajorInfo> majors;

        @Schema(description = "2024年招生计划统计")
        private EnrollmentStats enrollmentStats;
    }

    /**
     * 学校基础信息
     */
    @Schema(description = "学校基础信息")
    @Data
    public static class SchoolBasicInfo {
        @Schema(description = "是否985", example = "true")
        private Boolean is985;

        @Schema(description = "是否211", example = "true")
        private Boolean is211;

        @Schema(description = "是否双一流", example = "true")
        private Boolean isDoubleFirstClass;

        @Schema(description = "学校所在省份", example = "北京")
        private String province;

        @Schema(description = "学校所在城市", example = "北京市")
        private String city;

        @Schema(description = "学校类型", example = "综合类")
        private String schoolType;
    }

    /**
     * 专业信息
     */
    @Schema(description = "专业信息")
    @Data
    public static class MajorInfo {
        @Schema(description = "专业名称", example = "计算机科学与技术")
        private String majorName;

        @Schema(description = "专业代码", example = "080901")
        private String majorCode;

        @Schema(description = "专业等级", example = "rush", allowableValues = {"rush", "stable", "safe"})
        private String levelType;

        @Schema(description = "最低录取分数", example = "650")
        private Integer lowestScore;

        @Schema(description = "最低录取位次", example = "5000")
        private Integer lowestRanking;

        @Schema(description = "平均录取分数", example = "655")
        private Integer averageScore;

        @Schema(description = "最高录取分数", example = "660")
        private Integer highScore;

        @Schema(description = "2024年招生计划数", example = "50")
        private String enrollmentPlan;

        @Schema(description = "批次名称", example = "本科一批")
        private String batchName;
    }

    /**
     * 招生计划统计
     */
    @Schema(description = "招生计划统计")
    @Data
    public static class EnrollmentStats {
        @Schema(description = "总招生计划数", example = "500")
        private Integer totalPlan;

        @Schema(description = "最低录取分数", example = "620")
        private Integer minScore;

        @Schema(description = "最低录取位次", example = "8000")
        private Integer minRanking;
    }

    /**
     * 冲稳保分类统计
     */
    @Schema(description = "冲稳保分类统计")
    @Data
    public static class ClassificationSummary {
        @Schema(description = "冲刺学校数量", example = "5")
        private Integer rushSchoolCount;

        @Schema(description = "稳妥学校数量", example = "8")
        private Integer stableSchoolCount;

        @Schema(description = "保底学校数量", example = "12")
        private Integer safeSchoolCount;

        @Schema(description = "总学校数量", example = "25")
        private Integer totalSchoolCount;

        @Schema(description = "冲刺专业数量", example = "15")
        private Integer rushMajorCount;

        @Schema(description = "稳妥专业数量", example = "25")
        private Integer stableMajorCount;

        @Schema(description = "保底专业数量", example = "35")
        private Integer safeMajorCount;

        @Schema(description = "总专业数量", example = "75")
        private Integer totalMajorCount;
    }
}
